package top.blueShark.template.common.initializer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import top.blueShark.template.entity.SysRole;
import top.blueShark.template.service.SysRoleService;

import javax.annotation.Resource;

/**
 * 应用启动时初始化角色数据
 * CommandLineRunner 是一个接口，它有一个方法 run(String... args)，这个方法会在 Spring Boot 应用启动后执行。
 */
@Component
public class RoleInitializer implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(RoleInitializer.class);
    @Value("${app.default-roles.user-id}") // 从 application.yml 读取值
    private String defaultUserRoleId; // 将常量改为成员变量

    @Resource
    private SysRoleService sysRoleService;

    @Override
    public void run(String... args) throws Exception {
        logger.info("正在检查并初始化默认 'user' 角色 (ID: {})...", defaultUserRoleId);

        // 检查 'user' 角色（通过固定ID）是否存在
        SysRole existingUserRole = sysRoleService.getById(defaultUserRoleId); // 需要添加此方法

        if (existingUserRole == null) {
            logger.info("'user' 角色不存在，正在创建...");
            SysRole userRole = new SysRole();
            userRole.setId(defaultUserRoleId); // 设置固定ID
            userRole.setName("user");
            userRole.setStatus(1); // 默认状态为正常
            userRole.setRemark("默认角色");

            try {
                sysRoleService.addRoleWithFixedId(userRole);
                logger.info("'user' 角色创建成功！");
            } catch (Exception e) {
                logger.error("创建 'user' 角色失败", e);
            }
        } else {
            logger.info("'user' 角色已存在 (ID: {}，名称: {})，无需创建。", existingUserRole.getId(), existingUserRole.getName());
        }
    }
}